﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.Objects.DataClasses;
using System.Linq;
using System.Text;
using EFDataModel.Enums;

namespace EFDataModel
{
    public partial class EFDynamicData
    {
        #region Public Functions
        /// <summary>
        /// Gibt den passenden Wert zurück der angezeigt werden soll.
        /// </summary>
        /// <returns>Wert der angezeigt werden soll | Null wenn keiner hinterlegt ist</returns>
        public object GetValue()
        {
            //Wenn noch kein Wert gesetzt wurde, dann einen Leeren String zurück gegeben
            if (EFDynamicDataType != null)
            {
                //Es gibt unterschiedliche Datentypen und jeder ist in einem bestimmten Property abgelegt, hier prüfen wir aus welchem Property der passende WErt gesucht werden soll.
                switch (this.EFDynamicDataType.DynamicDataType)
                {
                    //Die folgenden Datetypen legen Ihre Daten im StringValue ab
                    case EFDynamicDataTypes.Textblock:
                    case EFDynamicDataTypes.EMail:
                    case EFDynamicDataTypes.String:
                        if (!string.IsNullOrEmpty(StringValue))
                        {
                            return StringValue;
                        }
                        break;

                    case EFDynamicDataTypes.Datetime:
                        if (DatetimeValue.HasValue)
                        {
                            return DatetimeValue.Value;
                        }
                        break;

                    case EFDynamicDataTypes.Integer:
                    //Ein ausgewählter Listenwert entspricht einem Integer der in der DB hinterlegt wird, dabei wird auf die Spalte Integer zurückgegriffen
                    case EFDynamicDataTypes.List: 
                        if (IntegerValue.HasValue)
                        {
                            return IntegerValue.Value;
                        }
                        break;

                    case EFDynamicDataTypes.Decimal:
                        if (DecimalValue.HasValue)
                        {
                            return DecimalValue.Value;
                        }
                        break;

                    case EFDynamicDataTypes.Boolean:
                        if (BooleanValue.HasValue)
                        {
                            return BooleanValue.Value;
                        }
                        break;
                }
            }

            //Wenn keine Werte angegeben wurden dann einen leeren String zurückgeben
            return null;
        }
        #endregion
    }
}
